/**
 * @Title: FastDFSUtil.java
 * @Prject: p2p-person
 * @Package: com.lc.web.fastdfs
 * @Description:
 * @author: CJNusan
 * @date: 2017年11月8日 下午10:01:21
 * @version: V1.0
 */
package com.company.project.config.file.fastdfs;

import org.csource.common.MyException;
import org.csource.common.NameValuePair;
import org.springframework.http.ResponseEntity;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

/**
 * @Description: 完成从DFS服务器文件上传和下载的工具包
 * @author: CJNusan
 * @date: 2018年09月01日 下午10:01:21
 */
public class FastDFSUtil {

    /**
     * @Description: 文件上传到fastdfs服务器
     * @date: 2017年11月8日 下午10:04:44
     */
    public static String upload(MultipartFile file)
            throws IOException, MyException {

        // 获取文件后缀名
        String ext = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf('.') + 1);
        FastDFSFile fast = new FastDFSFile(file.getBytes(), ext);
        NameValuePair[] meta_list = new NameValuePair[4];
        meta_list[0] = new NameValuePair("fileName", file.getOriginalFilename());
        meta_list[1] = new NameValuePair("fileLength", String.valueOf(file.getSize()));
        meta_list[2] = new NameValuePair("fileExt", ext);
        meta_list[3] = new NameValuePair("fileAuthor", FastDFSFile.FILE_DEFAULT_AUTHOR);
        String filePath = FileManager.upload(fast, meta_list);
        return filePath;
    }


    /**
     * @param filePath
     * @return: download<byte[]>
     * @Description: 下载文件需要用到组名和文件名
     * @date: 2017年11月8日 下午10:12:06
     */
    public static ResponseEntity<byte[]> download(String filePath) throws IOException, MyException {
        String substr = filePath.substring(filePath.indexOf("group"));
        String group = substr.split(File.separator)[0];
        String remoteFileName = substr.substring(substr.indexOf(File.separator) + 1);
        //下载后定义文件的名字 我们这里用UUID来生成
        String specFileName = UUID.randomUUID() + substr.substring(substr.indexOf('.'));
        return FileManager.download(group, remoteFileName, specFileName);
    }

    /**
     * @param filePath
     * @return: download<byte[]>
     * @Description: 删除文件需要用到组名和文件名 删除失败返回-1，否则返回0
     * @date: 2020年7月7日 上午午10:12:06
     */
    public static int delete(String filePath) throws IOException, MyException {
        String substr = filePath.substring(filePath.indexOf("group"));
        String group = substr.split(File.separator)[0];
        String remoteFileName = substr.substring(substr.indexOf(File.separator) + 1);
        return FileManager.deleteFile(group, remoteFileName);
    }

}
